﻿#ifndef PST_JSONPARSER_H
#define PST_JSONPARSER_H

#include "JsonDef.h"

#include <qobject.h>

namespace pst
{
    QString GetSimulationScenario(int sim_scene);

    class JsonParser : public QObject
    {
    public:
        // 工程数据
        struct ProjectData
        {
            QVector<HearderFileInfo> projectFileData;     // json表头解析数据
            QVector<ResultDataPointer> projectResultData; // 结果文件解析数据
        };
        using ProjectDataPointer = QSharedPointer<ProjectData>; // 工程数据智能指针定义

        // 解析返回信息
        struct ResultInfo
        {
            ProjectDataPointer projectData; // 工程数据
            QStringList errorMessageList;   // 错误消息列表
            QStringList waringMessgaeList;  // 警告信息列表
        };

        static JsonParser* GetInstance();

        void AddResultData(const ProjectDataPointer& projectDataPointer); // 添加工程数据

        ResultInfo GetResultData(const QVector<QString>& filepathArray); // 直接读取结果文件解析数据

        ResultInfo GetProjectInfo(const QString& filePath); // 获取工程信息(传入json路径，解析读取)

        void GetResultData(ResultInfo& resultInfo, ResultFilePointer& resultFileInfo); // 获取结果文件信息

        inline QList<ProjectDataPointer> GetProjectDataList() const
        {
            return m_projectDataList;
        }

        inline const QList<ProjectDataPointer>& GetCProjectDataList() const
        {
            return m_projectDataList;
        }

        inline void ClearAllData()
        {
            m_projectDataList.clear();
        }

    private:
        explicit JsonParser(QObject* parent = nullptr);
        ~JsonParser();
        JsonParser(const JsonParser&) = delete;
        JsonParser& operator=(const JsonParser&) = delete;

        QList<ProjectDataPointer> m_projectDataList;
    };
} // namespace pst

#endif
